import org.junit.jupiter.api.Test;

import java.lang.reflect.Array;
import java.util.Arrays;


/**
 * 先排序，然后先固定两个数，在剩下的里面找两个数的和等于相反数，去重
 */
public class 二分查找迭代器实现_非递归 {



@Test
public void test() {

        int []array= {1,2,4,5};
        System.out.println(binarySearch(array, 3));
}

/**
 * 二分查找：首先将定义左中右三个位置，每次拿中间位置的值去和目标值比较，要是相同就返回
 * 要是小于中间值，就将有边界设置为middle-1
 * 要是大于中间值，就将左边界设置为middle+1
 * @param array
 * @param value
 * @return
 */
        public static int binarySearch(int[] array, int value) {
            //先排序
            //定义左边界和有边界
            int left=0;
            int right=array.length-1;
            while(left<=right){
                //定义中间值
//            int middle=(left+right)/2;
                int middle=left+(right-left)/2;//避免超出int的范围
                Arrays.sort(array);
                if (array[middle]==value){
                    return middle;
                }else if (value<array[middle]){
                    right=middle-1;
                }else if (value>array[middle]){
                    left=middle+1;
                }
            }
            return -1;
        }
    }








